package com.woniuxy.amusementparkos.service.ssj.imp;

import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

import com.woniuxy.amusementparkos.dao.ssj.CusDao;
import com.woniuxy.amusementparkos.entity.ssj.CountGoods;
import com.woniuxy.amusementparkos.entity.ssj.CountGoodsNum;
import com.woniuxy.amusementparkos.entity.ssj.CountGoodsSpend;
import com.woniuxy.amusementparkos.entity.ssj.CountOneGoods;
import com.woniuxy.amusementparkos.entity.ssj.CountOneGoodsNum;
import com.woniuxy.amusementparkos.entity.ssj.CountOneGoodsSpend;
import com.woniuxy.amusementparkos.entity.ssj.CountSingle;
import com.woniuxy.amusementparkos.entity.ssj.CountTotal;
import com.woniuxy.amusementparkos.entity.ssj.Csw;
import com.woniuxy.amusementparkos.entity.ssj.Cus;
import com.woniuxy.amusementparkos.entity.ssj.Cw;
import com.woniuxy.amusementparkos.entity.ssj.Cwos;
import com.woniuxy.amusementparkos.entity.ssj.Cwosog;
import com.woniuxy.amusementparkos.entity.ssj.Goios;
import com.woniuxy.amusementparkos.service.ssj.CusService;

@Service
public class CusServiceImp implements CusService {
	@Autowired
	CusDao cusDao;

	/**
	 * 获取所有顾客详细信息 5表
	 */
	@Override
	public List<Csw> getAllCustomerDetail(int page,int pageSize) {
		return cusDao.selectAllCsw(page,pageSize);
	}

	/**
	 * 获取顾客消费总额  4表 更新顾客总消费额 单表 更新顾客消费等级 单表
	 */
	// 使用事务控制
	@Transactional
	@Override
	public void updateCtotalAndLidBycid() {
		// 获取所有顾客的消费总额
		List<Cus> customers = cusDao.selectAllCus();
		for (Cus cus : customers) {
			// 获取顾客总消费额
//			long cto0 = cusDao.sumOtotalByCid(cus.getCustomer_id());
//			// 获取顾客总退款额
//			long cto1 = cusDao.sumOtotalByCidAndOstate(cus.getCustomer_id());
//			//获取顾客消费总额
//			long cto=cto0-cto1;
			//获取顾客消费总额
			long cto=cusDao.sumOtotalByCid(cus.getCustomer_id());
			BigDecimal ctotal = new BigDecimal(cto);
			// 根据顾客编号更新顾客消费总额
			cusDao.updateCtotalByCid(cus.getCustomer_id(), ctotal);
			// 根据顾客编号更新顾客消费等级
			int ct = ctotal.intValue();
			Integer lid = 1;
			if (ct >= 800 && ct < 3000) {
				lid = 2;
			} else if (ct >= 2000 && ct < 8000) {
				lid = 3;
			} else if (ct >= 8000 && ct < 20000) {
				lid = 4;
			} else if (ct >= 20000) {
				lid = 5;
			}
			cusDao.updateLidByCid(cus.getCustomer_id(), lid);
		}

	}
	/**
	 * 根据腕带的未使用状态获取所有的顾客余额信息 2表
	 */
	@Override
	public List<Cw> getAllBalance(int page,int pageSize) {
		return cusDao.selectAllBalanceByCwstate(page,pageSize);
	}
	/**
	 * 根据腕带的使用状态获取所有的顾客余额信息 2表
	 */
	@Override
	public List<Cw> getBalance(int page,int pageSize) {
		return cusDao.selectBalanceByCwstate(page,pageSize);
	}
	/**
	 * 获取指定顾客的消费记录
	 */
	@Override
	public List<Cwos> getSpendDetailByCid(Integer cid,int page,int pageSize) {
		return cusDao.selectSpendDetailByCid(cid,page,pageSize);
	}
//	/**
//	 * 获取日、月、年的新增顾客数，入园顾客数和消费顾客数
//	 */
//	@Transactional
//	@Override
//	public CountTotal getCountTotal(Date stime, Date etime) {
//		CountTotal ct=new CountTotal();
//		//根据顾客创建时间查询统计新增顾客数
//		long lcountCus=cusDao.countCusctime();
//		int countCus=(int) lcountCus;
//		ct.setCountCus(countCus);
//		//根据腕带创建时间查询统计入园顾客数
//		long lcountWi=cusDao.countWiWictime();
//		int countWi=(int) lcountWi;
//		ct.setCountWi(countWi);
//		//根据订单创建时间查询统计消费顾客数
//		long lcountOrder=cusDao.countOrdOctime();
//		int countOrder=(int) lcountOrder;
//		ct.setCountOrder(countOrder);
//		return ct;
//	}
	/**
	 * 获取日、月、年的新增顾客数，入园顾客数和消费顾客数
	 */
	@Transactional
	@Override
	public CountTotal getCountTotal() {
		CountTotal ct=new CountTotal();
		//根据顾客创建时间查询统计新增顾客数
		long lcountCus=cusDao.countCusctime();
		int countCus=(int) lcountCus;
		ct.setCountCus(countCus);
		//根据腕带创建时间查询统计入园顾客数
		long lcountWi=cusDao.countWiWictime();
		int countWi=(int) lcountWi;
		ct.setCountWi(countWi);
		//根据订单创建时间查询统计消费顾客数
		long lcountOrder=cusDao.countOrdOctime();
		int countOrder=(int) lcountOrder;
		ct.setCountOrder(countOrder);
		return ct;
	}
//	/**
//	 *获取日、月、年的单个顾客入园数和单个顾客消费数 
//	 */
//	@Transactional
//	@Override
//	public List<CountSingle> getCountSingle(Date stime, Date etime) {
//		List<CountSingle> counts=new ArrayList<CountSingle>();
//		List<Cus> customers = cusDao.selectAllCus();
//		  for (Cus cus : customers) {
//			  CountSingle count=new CountSingle();
//				int cid=cus.getCustomer_id();
//				count.setCid(cid);
//				String ctel=cus.getTel();
//				count.setCtel(ctel);
//				String cname=cus.getCustomer_name();
//				count.setCname(cname);
//				//查询统计单个顾客入园次数 
//				long lcountOneWi=cusDao.countWictimeByCid(cus.getCustomer_id());
//				int countOneWi=(int) lcountOneWi;
//				count.setCountOneWi(countOneWi);
//				//查询统计单个顾客消费次数 
//				long lcountOneOrder=cusDao.countOctimeByCid(cus.getLevel_id());
//				int countOneOrder=(int) lcountOneOrder;
//				count.setCountOneOrder(countOneOrder);
//				counts.add(count);
//			}
//		}
//		return counts;
//	}
	/**
	 *获取日、月、年的单个顾客入园数和单个顾客消费数 
	 */
	@Transactional
	@Override
	public List<CountSingle> getCountSingle() {
		List<CountSingle> counts=new ArrayList<CountSingle>();
		List<Cus> customers = cusDao.selectAllCus();
		  for (Cus cus : customers) {
			  CountSingle count=new CountSingle();
				int cid=cus.getCustomer_id();
				count.setCid(cid);
				String ctel=cus.getTel();
				count.setCtel(ctel);
				String cname=cus.getCustomer_name();
				count.setCname(cname);
				//查询统计单个顾客入园次数 
				long lcountOneWi=cusDao.countWictimeByCid(cus.getCustomer_id());
				int countOneWi=(int) lcountOneWi;
				count.setCountOneWi(countOneWi);
				//查询统计单个顾客消费次数 
				long lcountOneOrder=cusDao.countOctimeByCid(cus.getLevel_id());
				int countOneOrder=(int) lcountOneOrder;
				count.setCountOneOrder(countOneOrder);
				counts.add(count);
		}
		return counts;
	}
//	/**
//	 * 获取日、月、年的所有顾客消费商品数量排名
//	 */
//	@Transactional
//	@Override
//	public List<CountGoodsNum> getCountGoodsNum(Date stime, Date etime) {
//		List<CountGoodsNum> cgns=new ArrayList<CountGoodsNum>();
//		List<Goios> goose=cusDao.selectAllGoios();
//			for (Goios goos : goose) {
//				CountGoodsNum cgn=new CountGoodsNum();
//				int gid=goos.getGid();
//				cgn.setGid(gid);
//				String gname=goos.getGname();
//				cgn.setGname(gname);
//				int sid=goos.getSid();
//				cgn.setSid(sid);
//				String sname=goos.getSname();
//				cgn.setSname(sname);
//				//查询统计所有顾客消费商品数量
//				long lcountNum=cusDao.sumNumByGid(goos.getGid());
//				int countNum=(int) lcountNum;
//				cgn.setCountNum(countNum);
//				cgns.add(cgn);
//		}
//		return cgns;
//	}
	/**
	 * 获取日、月、年的所有顾客消费商品数量排名
	 */
	@Transactional
	@Override
	public List<CountGoodsNum> getCountGoodsNum() {
		List<CountGoodsNum> cgns=new ArrayList<CountGoodsNum>();
		List<Goios> goose=cusDao.selectAllGoios();
			for (Goios goos : goose) {
				CountGoodsNum cgn=new CountGoodsNum();
				int gid=goos.getGid();
				cgn.setGid(gid);
				String gname=goos.getGname();
				cgn.setGname(gname);
				int sid=goos.getSid();
				cgn.setSid(sid);
				String sname=goos.getSname();
				cgn.setSname(sname);
				//查询统计所有顾客消费商品数量
				long lcountNum=cusDao.sumNumByGid(goos.getGid());
				int countNum=(int) lcountNum;
				cgn.setCountNum(countNum);
				cgns.add(cgn);
		}
		return cgns;
	}
//	/**
//	 * 获取日、月、年的所有顾客消费商品消费额排名
//	 */
//	@Transactional
//	@Override
//	public List<CountGoodsSpend> getCountGoodsSpend(Date stime, Date etime) {
//		List<CountGoodsSpend> cgse=new ArrayList<CountGoodsSpend>();
//		List<Goios> goose=cusDao.selectAllGoios();
//			for (Goios goos : goose) {
//				CountGoodsSpend cgs=new CountGoodsSpend();
//				int gid=goos.getGid();
//				cgs.setGid(gid);
//				String gname=goos.getGname();
//				cgs.setGname(gname);
//				int sid=goos.getSid();
//				cgs.setSid(sid);
//				String sname=goos.getSname();
//				cgs.setSname(sname);
//				//查询统计所有顾客消费商品消费额
//				long lcountSpend=cusDao.sumSpendByGid(goos.getGid());
//				int countSpend=(int) lcountSpend;
//				cgs.setCountSpend(countSpend);
//				cgse.add(cgs);
//		}
//		return cgse;
//	}
	/**
	 * 获取日、月、年的所有顾客消费商品消费额排名
	 */
	@Transactional
	@Override
	public List<CountGoodsSpend> getCountGoodsSpend() {
		List<CountGoodsSpend> cgse=new ArrayList<CountGoodsSpend>();
		List<Goios> goose=cusDao.selectAllGoios();
			for (Goios goos : goose) {
				CountGoodsSpend cgs=new CountGoodsSpend();
				int gid=goos.getGid();
				cgs.setGid(gid);
				String gname=goos.getGname();
				cgs.setGname(gname);
				int sid=goos.getSid();
				cgs.setSid(sid);
				String sname=goos.getSname();
				cgs.setSname(sname);
				//查询统计所有顾客消费商品消费额
				long lcountSpend=cusDao.sumSpendByGid(goos.getGid());
				int countSpend=(int) lcountSpend;
				cgs.setCountSpend(countSpend);
				cgse.add(cgs);
		}
		return cgse;
	}
	/**
	 * 获取所有顾客的信息
	 */
	@Override
	public List<Cus> getAllCus() {
		return cusDao.selectAllCus();
	}
//	/**
//	 * 获取日、月、年的单个顾客消费商品数量
//	 */
//	@Transactional
//	@Override
//	public List<CountOneGoodsNum> getOneCountGoodsNum(int cid, Date stime, Date etime) {
//		List<CountOneGoodsNum> cogns=new ArrayList<CountOneGoodsNum>();
//		List<Cwosog> cgs=cusDao.selectListByCid(cid);
//			for (Cwosog cg : cgs) {
//				CountOneGoodsNum cogn=new CountOneGoodsNum();
//				int gid=cg.getGid();
//				cogn.setGid(gid);
//				String gname=cg.getGname();
//				cogn.setGname(gname);
//				int sid=cg.getSid();
//				cogn.setSid(sid);
//				String sname=cg.getSname();
//				cogn.setSname(sname);
//				//查询统计单个顾客消费商品数量
//				long lcountOneNum=cusDao.sumOneNumByGid(cg.getGid());
//				int countOneNum=(int) lcountOneNum;
//				cogn.setCountOneNum(countOneNum);
//				cogns.add(cogn);
//		}
//		return cogns;
//	}
	/**
	 * 获取日、月、年的单个顾客消费商品数量
	 */
	@Transactional
	@Override
	public List<CountOneGoodsNum> getOneCountGoodsNum(int cid) {
		List<CountOneGoodsNum> cogns=new ArrayList<CountOneGoodsNum>();
		List<Cwosog> cgs=cusDao.selectListByCid(cid);
			for (Cwosog cg : cgs) {
				CountOneGoodsNum cogn=new CountOneGoodsNum();
				int gid=cg.getGid();
				cogn.setGid(gid);
				String gname=cg.getGname();
				cogn.setGname(gname);
				int sid=cg.getSid();
				cogn.setSid(sid);
				String sname=cg.getSname();
				cogn.setSname(sname);
				//查询统计单个顾客消费商品数量
				long lcountOneNum=cusDao.sumOneNumByGid(cg.getGid());
				int countOneNum=(int) lcountOneNum;
				cogn.setCountOneNum(countOneNum);
				cogns.add(cogn);
		}
		return cogns;
	}
//	/**
//	 * 获取日、月、年的单个顾客消费商品消费额
//	 */
//	@Transactional
//	@Override
//	public List<CountOneGoodsSpend> getOneCountGoodsSpend(int cid, Date stime, Date etime) {
//		List<CountOneGoodsSpend> cogse=new ArrayList<CountOneGoodsSpend>();
//		List<Cwosog> cgs=cusDao.selectListByCid(cid);
//			for (Cwosog cg : cgs) {
//				CountOneGoodsSpend cogs=new CountOneGoodsSpend();
//				int gid=cg.getGid();
//				cogs.setGid(gid);
//				String gname=cg.getGname();
//				cogs.setGname(gname);
//				int sid=cg.getSid();
//				cogs.setSid(sid);
//				String sname=cg.getSname();
//				cogs.setSname(sname);
//				//查询统计单个顾客消费商品消费额
//				long lcountOneSpend=cusDao.sumOneSpendByGid(cg.getGid());
//				int countOneSpend=(int) lcountOneSpend;
//				cogs.setCountOneSpend(countOneSpend);
//				cogse.add(cogs);
//		}
//		return cogse;
//	}
	/**
	 * 获取日、月、年的单个顾客消费商品消费额
	 */
	@Transactional
	@Override
	public List<CountOneGoodsSpend> getOneCountGoodsSpend(int cid) {
		List<CountOneGoodsSpend> cogse=new ArrayList<CountOneGoodsSpend>();
		List<Cwosog> cgs=cusDao.selectListByCid(cid);
			for (Cwosog cg : cgs) {
				CountOneGoodsSpend cogs=new CountOneGoodsSpend();
				int gid=cg.getGid();
				cogs.setGid(gid);
				String gname=cg.getGname();
				cogs.setGname(gname);
				int sid=cg.getSid();
				cogs.setSid(sid);
				String sname=cg.getSname();
				cogs.setSname(sname);
				//查询统计单个顾客消费商品消费额
				long lcountOneSpend=cusDao.sumOneSpendByGid(cg.getGid());
				int countOneSpend=(int) lcountOneSpend;
				cogs.setCountOneSpend(countOneSpend);
				cogse.add(cogs);
		}
		return cogse;
	}
	//获取日、月、年的所有顾客消费商品总数量和消费总额
	@Override
	public List<CountGoods> getCountGoods() {
		List<CountGoods> cgs=new ArrayList<CountGoods>();
		List<Goios> goose=cusDao.selectAllGoios();
			for (Goios goos : goose) {
				CountGoods cg=new CountGoods();
				int gid=goos.getGid();
				cg.setGid(gid);
				String gname=goos.getGname();
				cg.setGname(gname);
				int sid=goos.getSid();
				cg.setSid(sid);
				String sname=goos.getSname();
				cg.setSname(sname);
				//查询统计所有顾客消费商品数量
				long lcountNum=cusDao.sumNumByGid(goos.getGid());
				int countNum=(int) lcountNum;
				cg.setCountNum(countNum);
				//查询统计所有顾客消费商品消费额
				long lcountSpend=cusDao.sumSpendByGid(goos.getGid());
				int countSpend=(int) lcountSpend;
				cg.setCountSpend(countSpend);
				cgs.add(cg);
		}
		return cgs;
	}
	//获取日、月、年的单个顾客消费商品总数量和消费总额
	@Override
	public List<CountOneGoods> getOneCountGoods(int cid) {
		List<CountOneGoods> cogs=new ArrayList<CountOneGoods>();
		List<Cwosog> cgs=cusDao.selectListByCid(cid);
			for (Cwosog cg : cgs) {
				CountOneGoods cog=new CountOneGoods();
				int gid=cg.getGid();
				cog.setGid(gid);
				String gname=cg.getGname();
				cog.setGname(gname);
				int sid=cg.getSid();
				cog.setSid(sid);
				String sname=cg.getSname();
				cog.setSname(sname);
				//查询统计单个顾客消费商品消费额
				long lcountOneSpend=cusDao.sumOneSpendByGid(cg.getGid());
				int countOneSpend=(int) lcountOneSpend;
				cog.setCountOneSpend(countOneSpend);
				cogs.add(cog);
		}
		return cogs;
	}
	//获取顾客总人数
	@Override
	public long getCountCus() {
		return cusDao.countCus();
	}
	//获取腕带状态为0时的顾客数据总数
	@Override
	public long getCountCw() {
		return cusDao.countCw();
	}
	//获取腕带状态为1时的顾客数据总数
	@Override
	public long getCountCwb() {
		return cusDao.countCwb();
	}
	//获取单个顾客订单数据总数
	@Override
	public long getCountByCid() {
		return cusDao.countByCid();
	}

	@Override
	public long getCouGoods() {
		return cusDao.countCouGoods();
	}
}
